
package org.jash.user.login

import com.example.common.mvi.BaseRepository
import com.example.common.mvi.NetworkConfig
import com.example.common.mvi.NetworkResult
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

/**
 * 登录数据仓库类
 * 负责处理登录相关的数据操作，继承自BaseRepository
 */
class LoginRepository : BaseRepository() {

    /**
     * 登录API接口的懒加载实例
     * 使用Retrofit构建API接口实例
     */
    private val api: LoginApi by lazy {
        Retrofit.Builder()
            .baseUrl("http://10.161.9.80:7015/")
            .client(NetworkConfig.createOkHttpClient())
            .addConverterFactory(GsonConverterFactory.create(NetworkConfig.createGson()))
            .build()
            .create(LoginApi::class.java)
    }

    /**
     * 执行登录操作
     * @param username 用户名
     * @param password 密码
     * @return 返回包含LoginUserEntity的网络结果流
     */
    fun login(username: String, password: String): Flow<NetworkResult<LoginUserEntity>> {
        // 调用安全网络请求并处理结果
        return safeApiCall { api.login(username, password) }.map { result ->
            // 根据不同结果类型进行处理
            when (result) {
                // 处理成功结果
                is NetworkResult.Success -> {
                    val entity = result.data
                    // 判断业务逻辑是否成功
                    if (entity.code == 200) {
                        NetworkResult.Success(entity)
                    } else {
                        NetworkResult.Error(Exception(entity.msg))
                    }
                }
                // 处理错误结果
                is NetworkResult.Error -> result
                // 处理加载中结果
                is NetworkResult.Loading -> result
            }
        }
    }
}